//package com.geqian.management.utils;
//
//import com.aliyun.oss.OSSClient;
//import com.aliyun.oss.model.GeneratePresignedUrlRequest;
//import com.aliyun.oss.model.GetObjectRequest;
//import com.aliyun.oss.model.OSSObject;
//import com.aliyun.oss.model.PutObjectRequest;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.io.IOUtils;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletResponse;
//import java.io.ByteArrayInputStream;
//import java.io.File;
//import java.io.IOException;
//import java.io.InputStream;
//import java.net.URL;
//import java.net.URLEncoder;
//import java.text.SimpleDateFormat;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.UUID;
//
///**
// * @author geqian
// * @date 15:27 2023/2/5
// */
//@Component
//@Slf4j
//public class OSSUtils {
//
//    //存储资源的地方
//    private static String bucketName;
//
//    private static OSSClient ossClient;
//
//    //日期格式转换
//    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//
//
//    @Resource
//    public void setOssClient(OSSClient ossClient) {
//        OSSUtils.ossClient = ossClient;
//    }
//
//    @Value("${alibaba.cloud.oss.bucket}")
//    public void setBucketName(String bucketName) {
//        OSSUtils.bucketName = bucketName;
//    }
//
//
//    /**
//     * 上传文件
//     *
//     * @param inputStream 文件流
//     * @param fileName 文件名称
//     */
//    public static String uploadFile(InputStream inputStream, String fileName) {
//        String objectName = generateObjectName(fileName);
//        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
//        ossClient.putObject(putObjectRequest);
//        return generateUrl(objectName);
//    }
//
//
//    /**
//     * 上传文件
//     *
//     * @param bytes    二进制数组
//     * @param fileName 文件名称
//     */
//    public static String uploadFile(byte[] bytes, String fileName) {
//        String objectName = generateObjectName(fileName);
//        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(bytes));
//        ossClient.putObject(putObjectRequest);
//        return generateUrl(objectName);
//    }
//
//
//    /**
//     * 上传文件
//     *
//     * @param file      二进制数组
//     * @param fileName  文件名称
//     */
//    public static String uploadFile(File file, String fileName) {
//        String objectName = generateObjectName(fileName);
//        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
//        ossClient.putObject(putObjectRequest);
//        return generateUrl(objectName);
//    }
//
//
//    /**
//     * 删除文件
//     *
//     * @param objectName 文件路径及名称
//     */
//    public static void deleteFile(String objectName) {
//        ossClient.deleteObject(bucketName, objectName);
//    }
//
//
//    /**
//     * 下载文件
//     *
//     * @param objectName 目录及文件名称
//     * @param targetPath 保存路径
//     */
//    public static void downloadFile(String objectName, String targetPath) {
//        ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(targetPath));
//    }
//
//    /**
//     * 下载文件
//     *
//     * @param objectName 目录及文件名称
//     * @param fileName 文件名称
//     * @param response   请求响应
//     */
//    public static void downloadFile(String objectName, String fileName, HttpServletResponse response) throws IOException {
//        OSSObject ossObject = ossClient.getObject(bucketName, objectName);
//        InputStream inputStream = ossObject.getObjectContent();
//        response.setContentType(ossObject.getObjectMetadata().getContentType());
//        response.setHeader("Access-Control-Expose-Headers", "filename");
//        response.setHeader("filename", URLEncoder.encode(fileName, "UTF-8"));
//        response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
//        IOUtils.copy(inputStream, response.getOutputStream());
//        inputStream.close();
//        response.getOutputStream().close();
//    }
//
//
//    /**
//     * 生成文件的URL
//     *
//     * @param objectName 文件名称
//     * @return 文件URL
//     */
//    public static String generateUrl(String objectName) {
//        // 设置 URL 过期时间为一个月
//        Calendar calendar = Calendar.getInstance();
//        calendar.add(Calendar.MONTH, 1);
//        // 生成带有签名的文件访问 URL
//        GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);
//        generatePresignedUrlRequest.setExpiration(calendar.getTime());
//        URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
//        return url.toString();
//    }
//
//
//    /**
//     * uuid生成文件名，并将文件上传日期作为文件目录，拼接到文件名上
//     *
//     * @param fileName
//     * @return
//     */
//    private static String generateObjectName(String fileName) {
//        String directory = dateFormat.format(new Date()) + "/";
//        fileName = UUID.randomUUID().toString().replace("-", "") + fileName.substring(fileName.lastIndexOf("."));
//        return directory + fileName;
//    }
//
//
//    public static void main(String[] args) {
//        String s = "http://gulimall-geqian.oss-cn-chengdu.aliyuncs.com/2023-07-04/67f96a7b5e22486781bdb832fab4f9df.webp?Expires=1691164745&OSSAccessKeyId=LTAI5tAXo7jvghWSq3QodjgB&Signature=zICN4H%2FYy%2By0M9M8fFtrucn1sKw%3D";
//        System.out.println(s.replaceFirst("^.*//.*aliyuncs.com/", "").replaceFirst("\\?.*", ""));
//    }
//
//}
